package IT.DataAccess;

import IT.Entities.PlantillaEtapa;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import java.util.logging.Level;
import java.util.logging.Logger;

public class DatPlantillaEtapa implements IDatPlantillaEtapa{
    private PlantillaEtapa oEtapa;
    private List<PlantillaEtapa> oLista;
    private BDConexion oBase;
    
    private Connection oConexion;
    private CallableStatement oCst;    
    private ResultSet oRst;    
    
    public List<PlantillaEtapa> Listar(int nEstado) {
        oLista=new ArrayList<PlantillaEtapa>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaListar(?)}");
            oCst.setInt(1, nEstado);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new PlantillaEtapa(oRst.getInt("cod_plaeta_in"),
                        oRst.getInt("ord_plaeta_in"),
                        oRst.getString("nom_plaeta_vc"), oRst.getString("des_plaeta_vc"), 
                        oRst.getBoolean("apro_plaeta_bo"),                
                        oRst.getInt("est_plaeta_in"), oRst.getString("Estado"),
                        oRst.getInt("cod_plaproy_in"), oRst.getInt("Actividad"),
                        oRst.getInt("cod_ant_plaeta_in"), oRst.getString("Predecesor")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oLista;
    }

    public PlantillaEtapa Ind(int nCodigo) {
        oEtapa=new PlantillaEtapa();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaInd(?)}");
            oCst.setInt(1, nCodigo);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oEtapa.setCod_plaeta_in(oRst.getInt("cod_plaeta_in"));
                oEtapa.setOrd_plaeta_in(oRst.getInt("ord_plaeta_in"));
                oEtapa.setNom_plaeta_vc(oRst.getString("nom_plaeta_vc"));
                oEtapa.setDes_plaeta_vc(oRst.getString("des_plaeta_vc"));
                oEtapa.setApro_plaeta_bo(oRst.getBoolean("apro_plaeta_bo"));
                oEtapa.setEst_plaeta_in(oRst.getInt("est_plaeta_in"));
                oEtapa.setEstado(oRst.getString("Estado"));
                oEtapa.setCod_plaproy_in(oRst.getInt("cod_plaproy_in"));
                oEtapa.setActividad(oRst.getInt("Actividad"));
                oEtapa.setCod_ant_plaeta_in(oRst.getInt("cod_ant_plaeta_in"));
                oEtapa.setPredecesor(oRst.getString("Predecesor"));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oEtapa;
    }

    public List<PlantillaEtapa> Ubi(int nProyecto,int nEstado) {
        oLista=new ArrayList<PlantillaEtapa>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaUbi(?,?)}");
            oCst.setInt(1, nProyecto);
            oCst.setInt(2, nEstado);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new PlantillaEtapa(oRst.getInt("cod_plaeta_in"),
                        oRst.getInt("ord_plaeta_in"),
                        oRst.getString("nom_plaeta_vc"), oRst.getString("des_plaeta_vc"), 
                        oRst.getBoolean("apro_plaeta_bo"),                
                        oRst.getInt("est_plaeta_in"), oRst.getString("Estado"),
                        oRst.getInt("cod_plaproy_in"), oRst.getInt("Actividad"),
                        oRst.getInt("cod_ant_plaeta_in"), oRst.getString("Predecesor")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oLista;
    }
    public List<PlantillaEtapa> UbiSin(int nProyecto,int nEstado,
                                      String cEtapa) {
        oLista=new ArrayList<PlantillaEtapa>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaUbiSin(?,?,?)}");
            oCst.setInt(1, nProyecto);
            oCst.setInt(2, nEstado);
            oCst.setString(3, cEtapa);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new PlantillaEtapa(oRst.getInt("cod_plaeta_in"),
                        oRst.getInt("ord_plaeta_in"),
                        oRst.getString("nom_plaeta_vc"), oRst.getString("des_plaeta_vc"), 
                        oRst.getBoolean("apro_plaeta_bo"),                
                        oRst.getInt("est_plaeta_in"), oRst.getString("Estado"),
                        oRst.getInt("cod_plaproy_in"), oRst.getInt("Actividad"),
                        oRst.getInt("cod_ant_plaeta_in"), oRst.getString("Predecesor")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oLista;
    }
    
    public int Orden(int nProyecto) {
        int nResultado=0;
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaOrden(?,?)}");
            oCst.setInt(1, nProyecto);
            oCst.registerOutParameter(2, java.sql.Types.INTEGER);
            oCst.executeQuery();        
            nResultado=oCst.getInt(2);
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
        return nResultado;
    }
  
    public void Insertar(PlantillaEtapa ent) {
         try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaInsertar(?,?,?, ?,?,?, ?)}");
            oCst.setInt(1, ent.getOrd_plaeta_in());
            oCst.setString(2, ent.getNom_plaeta_vc());
            oCst.setString(3, ent.getDes_plaeta_vc());
            
            oCst.setBoolean(4, ent.isApro_plaeta_bo());
            oCst.setInt(5, ent.getEst_plaeta_in());
            oCst.setInt(6, ent.getCod_plaproy_in());
            oCst.setInt(7, ent.getCod_ant_plaeta_in());
            oCst.execute();
            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void Editar(PlantillaEtapa ent) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaEditar(?,?,?, ?,?,?, ?)}");
            
            oCst.setInt(1, ent.getCod_plaeta_in());
            //oCst.setInt(2, ent.getOrd_plaeta_in());
            oCst.setString(2, ent.getNom_plaeta_vc());
            oCst.setString(3, ent.getDes_plaeta_vc());
            
            oCst.setBoolean(4, ent.isApro_plaeta_bo());
            oCst.setInt(5, ent.getEst_plaeta_in());
            oCst.setInt(6, ent.getCod_plaproy_in());
            
            oCst.setInt(7, ent.getCod_ant_plaeta_in());
            oCst.execute();
            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }

    public void EditarOrden(PlantillaEtapa ent) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaEditarOrden(?,?)}");
            
            oCst.setInt(1, ent.getCod_plaeta_in());
            oCst.setInt(2, ent.getOrd_plaeta_in());                   
            oCst.execute();            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }
    
    public void Eliminar(int nCodigo) {
         try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaEliminar(?)}");
            oCst.setInt(1,nCodigo);                  
            oCst.execute();
            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List<PlantillaEtapa> Predecesor(int nProyecto) {
        oLista=new ArrayList<PlantillaEtapa>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaEtapaPredecesor(?)}");
            oCst.setInt(1, nProyecto);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new PlantillaEtapa(oRst.getInt("cod_plaeta_in"),
                        oRst.getInt("ord_plaeta_in"),
                        oRst.getString("nom_plaeta_vc")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oLista;
    }
}
